C Sharp(十一)
这一篇,我们再来看看 C# 中的显式转换以及隐式转换。
隐式转换
有些类型的转换不会丢失数据或精度:
- C# 会自动做这些转换,称为隐式转换
- 从位数少的源转换为位数更多的源,目标多出来的位使用 0 或 1 补充
- 当从小的无符号类型转换为更大的无符号类型,多出来的位以 0 进行填充,称为 0 扩展
- 对于有符号类型,额外的高位使用符号位进行扩展,称为符号扩展
显式转换
对于源类型的任意值在被转换为目标类型时会丢失的情况,C# 语言是不提供两种类型的自动转换,如果我们希望这两种类型进行转换,就必须使用显式转换,这叫做强制转换表达式。
|
装箱转换
C# 所有类型都继承自 object 类型,然而,值类型是高效轻量的类型,但是当我们需要对象组件,可以使用装箱。
装箱是一种隐式转换,接受值类型的值,在堆上创建一个引用类型对象,返回该引用。
|
需要注意的是: 装箱操作的时一个副本,装箱之后,原始值和引用副本可以独立操作。
|
拆箱转换
拆箱是将装箱后的引用返回值类型的操作。
注意: 拆箱是显式转换。
|
拆箱非值类型会抛出异常。
is 运算符
我们可以使用 is 运算符检测转换是否会成功,避免盲目转换。
|
as 运算符
as 运算符和强制转换类似,只是他不会抛出异常。如果转换失败,会返回 null。
|